/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.DefaultComboBoxModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author O2
 */
public class DAOEntidadFila extends ManejadorBaseDatos implements IDAOPersistencia{

    public DAOEntidadFila() throws Exception {
        super();
    }

    public DAOEntidadFila(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        super(driver, servidor, url, usuarioBD, passwordUsuarioBD, nombreBD);
    }
    
    public DefaultTableModel getTablaFilas(int codig_Estrat, int codig_Pestania, int filaAnio_reporte) {
        DefaultTableModel tableModel = new DefaultTableModel();
        try {
            String nomb_Cabezal="";
            int cantFilas = contarNombre_Fila(codig_Estrat, codig_Pestania, filaAnio_reporte);
            
            conectar();
            
            switch (codig_Pestania){
                case 1: case 16:
                    cantFilas=cantFilas+1;
                    break;
                case 2:
                    cantFilas=cantFilas+1;
                    break;
                case 3: case 22:
                    cantFilas=cantFilas+1;
                    break;
                case 40: case 17: case 31: //aqui modifique 2007
                    cantFilas = cantFilas + 1;
                    break;
                case 41: case 18:
                    cantFilas = cantFilas + 1;
                    break;
                case 42: case 19:
                    break;
                case 5: case 23: case 32:
                    break;
                case 6: case 20: case 33: //aqui he modificado 2007
                    break;
                case 7: case 21:
                    cantFilas=cantFilas+1;
                    break;
                case 8: case 26:
                    cantFilas=cantFilas+1;
                    break;
                case 9: case 35: //aqui pal 2007
                    break;
                case 10: case 27:
                    break;
                case 11: case 24:
                    break;
                case 12: case 25:
                    cantFilas=cantFilas+1;
                    break;
                case 13:
                    cantFilas = cantFilas + 1;
                    break;
                case 30: case 34: case 36:
                    break;
                default: 
                    break;
            }
            Object[][] data = new String[cantFilas][1];
            String[] nombre_Filas = getNombresFilas(codig_Estrat, codig_Pestania, filaAnio_reporte);
            if (codig_Pestania == 5 || codig_Pestania == 23 || codig_Pestania == 32 || codig_Pestania == 6 || codig_Pestania == 33 || codig_Pestania == 20 || codig_Pestania == 9 || codig_Pestania == 10 || codig_Pestania == 35 || codig_Pestania == 27 || codig_Pestania == 11 || codig_Pestania == 24 || codig_Pestania == 42 || codig_Pestania == 19 || codig_Pestania == 30 || codig_Pestania == 34|| codig_Pestania == 36) { // aqui modifque pal 2007
                for (int j = 0; j < cantFilas; j++) {
                    
                    data[j][0] = nombre_Filas[j];
                }
            } else {
                for (int j = 0; j < cantFilas - 1; j++) {
                    data[j][0] = nombre_Filas[j];
                }
            }
            switch (codig_Pestania){
                case 1: case 16:
                    nomb_Cabezal="GRUPO ETÁREO";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 2:
                    nomb_Cabezal="GRUPO ETÁREO";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 3: case 22:
                    nomb_Cabezal="GRUPO ETÁREO";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 40: case 17: case 31: // aqui modifieu pal 2007
                    nomb_Cabezal = "FON";
                    data[cantFilas - 1][0] = "TOTAL";
                    break;
                case 41: case 18:
                    nomb_Cabezal = "QUIEN ATIENDE EL PARTO";
                    data[cantFilas - 1][0] = "TOTAL";
                    break;
                case 42: case 19:
                    nomb_Cabezal = "INF. ADICIONAL DE P.I. Y R.N.";
                    break;
                case 5: case 23:
                    nomb_Cabezal="TIPO DE MORBILIDAD";
                    break;
                case 6: case 20:
                    nomb_Cabezal="TIPO DE MORBILIDAD";
                    break;
                case 7: case 21:
                    nomb_Cabezal="GRUPO ETÁREO";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 8: case 26:
                    nomb_Cabezal="FON";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 9:
                    nomb_Cabezal="TIPO";
                    break;
                case 10: case 27:
                    nomb_Cabezal="CAB. N°";
                    break;
                case 11: case 24:
                    nomb_Cabezal="TIPO";
                    break;
                case 12: case 25:
                    nomb_Cabezal="TIPO";
                    data[cantFilas-1][0] = "TOTAL DE NEONATOS";
                    break;
                case 13:
                    nomb_Cabezal="GRUPO ETÁREO";
                    data[cantFilas-1][0] = "TOTAL";
                    break;
                case 30: case 32: case 33: case 34: case 35: case 36:// aqui modifique pal 2007
                    nomb_Cabezal="-.-/";
                    break;
            }
            String[] columNames = {nomb_Cabezal};
            tableModel.setDataVector(data, columNames);

        
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        desconectar();
        return tableModel;
    }

    public String[] getNombresFilas(int codig_Estrat, int codig_Pestania, int filaAnio_reporte) {
        int i = 0;
        String[] nombresFilas = new String[contarNombre_Fila(codig_Estrat, codig_Pestania, filaAnio_reporte)];

        try {
            conectar();
            Connection conn = getConexion();
            CallableStatement proc = conn.prepareCall(" CALL fila_nombre(?,?,?) ");
            proc.setInt("codigo_Estrat", codig_Estrat);
            proc.setInt("codigo_Pestania", codig_Pestania);
            proc.setInt("filaAnio_reporte", filaAnio_reporte);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                nombresFilas[i] = res.getString("nombre_Fila");
                i++;
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return nombresFilas;
    }
    
    public int contarNombre_Fila(int codigo_Estrategia, int codigo_Pestania, int fila_anio_Report) {
        int cant = 0;
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL fila_contar_nombre(?,?,?) ");
            proc.setInt("codigo_Estrat", codigo_Estrategia);
            proc.setInt("codigo_Pestania", codigo_Pestania);
            proc.setInt("anio_Reporte", fila_anio_Report);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                cant = Integer.parseInt(res.getString("Total"));
            }
            res.close();

        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();

        return cant;
    }
    
    public int getCodigo_fila(String nombre, int estrategia, int pestania, int fila_Anio_Report) {
        int codigo_fila = 0;
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL fila_obtener_cod(?,?,?,?) ");
            proc.setString("nombre", nombre);
            proc.setInt("estrategia", estrategia);
            proc.setInt("pestania", pestania);
            proc.setInt("anio_Reporte", fila_Anio_Report);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                codigo_fila = Integer.parseInt(res.getString("codigo_Fila"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return codigo_fila;
    }

    @Override
    public int insertar(IEntidad objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int borrar(String condicion) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int modificar(IEntidad objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public DefaultComboBoxModel getExtra_Anio_ModelReport(int cod_Estrateg) {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        try {
            CallableStatement proc2 = getConexion().prepareCall(" CALL Ver_Anio_Modelos_Reporte(?) ");
            proc2.setInt("cod_Estrategia", cod_Estrateg);
            ResultSet res2 = proc2.executeQuery();
            while (res2.next()) {
                model.addElement(res2.getString("Anio"));
            }
            res2.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return model;
    }
    
}
